/****************************************************************************
 * Copyright (c) 2008 Marcelo Mayworm.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors: 	Marcelo Mayworm - initial API and implementation
 * 
 *
 * SPDX-License-Identifier: EPL-2.0
 *****************************************************************************/
package org.eclipse.ecf.presence.search;

/**
 * Base class implementation of {@link ICriterion} for logical criterion. 
 * Subclasses may be created as appropriate. It is just a simple 
 * implementation that can be considered for some provider or even used 
 * as base for some implementation.
 * @since 2.0
 */
public class LogicalCriterion implements ICriterion {

	final ICriterion left;
	final ICriterion right;
	final String operator;

	/**
	 * Creates a logic operation for compose a {@link ICriteria}
	 * @param left Criterion on the left side of the expression
	 * @param right Criterion on the right side of the expression
	 * @param operator Operator considered on the logical. Ex: And
	 */
	public LogicalCriterion(ICriterion left, ICriterion right, String operator) {
		this.left = left;
		this.right = right;
		this.operator = operator;
	}

	public String toExpression() {
		return left.toExpression() + ' ' + operator + ' ' + right.toExpression();
	}

	public String toString() {
		StringBuffer sb = new StringBuffer("LogicalCriterion["); //$NON-NLS-1$
		sb.append("left=").append(left).append(";"); //$NON-NLS-1$ //$NON-NLS-2$
		sb.append("right=").append(right).append(";"); //$NON-NLS-1$ //$NON-NLS-2$
		sb.append("operator=").append(operator).append("]"); //$NON-NLS-1$ //$NON-NLS-2$
		return sb.toString();
	}

}
